实地利用monkey patch来增加功能

使用monkey patch的方式增加或修改老系统里的一些方法属性

最近有发现,开发的系统中有一个请求第三方接口的方法并没有设置超时时间,需要统一给增加一个超时时间,但不影响设置了超时时间的方法,因此使用monkey patch的方式,在系统启动的时候,修改使用的requests方法

1
2
3
4
5
6
7
8
9
10
11
# money patch for requests
def request_patch(slf, *args, **kwargs):
print(f"Fix called, old_timeout={kwargs.get('timeout')}")
timeout = kwargs.get('timeout', 5)
print(f"Fix ok, now timeout={timeout}")
return slf.request_orig(*args, **kwargs, timeout=timeout)


if __name__ == '__main__':
setattr(requests.sessions.Session, 'request_orig', requests.sessions.Session.request)
requests.sessions.Session.request = request_patch
  • 这里只针对了使用requests.get/post的使用方式,如果有使用requests.session,需要继承该类,然后修改里面的一些属性
1
2
3
4
5
6
7
8
9
10
import requests

class SessionTimeoutFix(requests.Session):

def request(self, *args, **kwargs):
print("Fix called")
timeout = kwargs.pop('timeout', 2)
return super().request(*args, **kwargs, timeout=timeout)

requests.sessions.Session = SessionTimeoutFix